#!/bin/bash
# language-stats.sh

echo "=== 指定文件语言统计（仅保留 HTML/CSS/Vue/Less/JavaScript） ==="

# 定义需要统计的文件类型及对应语言（仅保留目标类型）
declare -A file_types=(
    ["vue"]="Vue"
    ["js"]="JavaScript"
    ["jsx"]="JavaScript"  # jsx 归为 JavaScript
    ["css"]="CSS"
    ["scss"]="CSS"        # scss 归为 CSS
    ["less"]="Less"
    ["html"]="HTML"
)

# 初始化统计（仅目标语言）
declare -A stats
stats["HTML"]=0
stats["CSS"]=0
stats["Vue"]=0
stats["Less"]=0
stats["JavaScript"]=0

# 获取所有文件
files=$(git ls-files)

# 遍历文件并统计（仅处理目标类型，排除其他文件）
for file in $files; do
    # 跳过图片文件
    case "${file##*.}" in
        "jpg"|"jpeg"|"png"|"gif"|"webp"|"svg") 
            continue ;;
    esac

    ext="${file##*.}"
    lang=${file_types["$ext"]}  # 匹配目标语言（非目标类型则为空）

    # 只处理目标类型的文件（非目标类型直接跳过，不统计）
    if [ -z "$lang" ]; then
        continue
    fi

    # 统计非空行数（排除纯空行和仅含空格的行）
    lines=$(grep -v '^[[:space:]]*$' "$file" | wc -l)

    # 累加目标语言的行数
    stats["$lang"]=$((stats["$lang"] + lines))
done

# 计算总行数（仅目标语言的累加和）
total_lines=0
for count in "${stats[@]}"; do
    total_lines=$((total_lines + count))
done

echo "总有效代码行数（仅目标类型）: $total_lines"
echo "-------------------------"

# 输出目标语言的行数及百分比
for lang in "${!stats[@]}"; do
    count=${stats[$lang]}
    if [ $total_lines -gt 0 ]; then
        # 计算百分比（保留2位小数）
        percentage=$(awk -v count="$count" -v total="$total_lines" 'BEGIN{printf "%.2f", (count * 100) / total}')
        printf "%-10s %6d 行  (%.2f%%)\n" "$lang" "$count" "$percentage"
    else
        printf "%-10s %6d 行  (0.00%%)\n" "$lang" "$count"
    fi
done


# 使用方法
# 1. 给脚本添加权限   chmod +x language-stats.sh
# 2. 在Git Bash 终端上运行 ./language-stats.sh